package com.blue.integration.serve;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 第三方存储文件接口
 * 
 * @author zhengj
 * @since 1.0 2016年12月1日
 */
public interface StorageClient
{
	
	/**
	 * 保存文件
	 * 
	 * @param bucket bucket 名称
	 * @param file 上传文件
	 * @param key 保存文件名称，如果为空，则自动生成
	 * @return 保存文件名称
	 */
	String save(Bucket bucket, File file, String key) throws IOException;
	
	/**
	 * 保存文件
	 * 
	 * @param bucket bucket 名称
	 * @param is 输入流
	 * @param name 原始文件名称
	 * @param key 保存文件名称，如果为空，则自动生成
	 * @return 保存文件名称
	 */
	String save(Bucket bucket, InputStream is, String name, String key) throws IOException;
	
	/**
	 * 删除文件
	 * 
	 * @param bucket bucket 名称
	 * @param key 保存文件名称
	 */
	void delete(Bucket bucket, String key);
	
	/**
	 * 下载文件
	 * 
	 * @param bucket bucket 名称
	 * @param key 保存文件名称
	 * @param dest 目标下载文件，如果为空，则在自动下载到临时目录
	 * @return 目标下载文件
	 * @throws IOException 下载IO异常时抛出
	 */
	File download(Bucket bucket, String key, File dest) throws IOException;

	/**
	 * 获取文件输入流
	 *
	 * @param bucket bucket 名称
	 * @param key 保存文件名称
	 * @return 文件输入流
	 * @throws IOException 获取文件输入流IO异常时抛出
	 */
	InputStream getStream(Bucket bucket, String key)  throws IOException;
	
	/**
	 * 下载并获取文件的文本内容
	 * 
	 * @param bucket bucket 名称
	 * @param key 保存文件名称
	 * @return 文件的文本内容
	 * @throws IOException 下载IO异常时抛出
	 */
	String getString(Bucket bucket, String key) throws IOException;
	
	/**
	 * 把 Key 组成一个完整的URL
	 * 
	 * @param bucket bucket 名称
	 * @param key 保存文件名称
	 * @return 可访问的URL
	 */
	String getUrl(Bucket bucket, String key);
	
	/**
	 * 通过上传文件名称创建保存文件名称
	 * 
	 * @param name 上传文件名称
	 * @return 保存文件名称
	 */
	String getKey(String name);
	
}
